/**
 * Copyright 2011-2013 Brin.com
 * All rights reserved.
 * 
 * @project
 * @author Brin
 * @version 1.0
 * @data 2012-05-01
 */
package com.brin.core.base.service;

import org.springframework.transaction.support.TransactionTemplate;

/**
 * 所有主表实体（Entity）对应的实体Service应当继承本类,而从表则应当与主表共用同一个实体服务。
 * 实体服务输入输出的Model对象应当是POJO以及String(主要是ID)。
 * 
 * 请注意：
 * 1）实体服务类的方法（增/删/改）用于：维护表实体的数据一致性与正确性，关注于数据逻辑。
 * 2）实体服务类的命名规范：<表名>+EntityServiceImpl
 * 3）实体服务类中，才提供事务模板。
 * 4）一个实体服务类中仅注入一个自己的Dao（基类已经提供方法）。但仅限于使用方法(C:create,D:delete,U:update)。
 * 5）实体服务类可以自行注入相关联的实体服务类（严禁注入业务服务类）。此时可以用事务模板。
 * 6）方法统一使用RuntimeException，作事务控制。
 * 
 * 方法中的事务代码范本
 * A.有结果返回：
 * getTransactionTemplate().execute(new TransactionCallback() {
 *		public Object doInTransaction(TransactionStatus status) {
 *			......
 *			if (要回滚) {
 *				throw new RuntimeException;
 *			}			
 *			return result;
 *		}
 *	});
 * B.无结果返回：
 * getTransactionTemplate().execute(new TransactionCallbackWithoutResult() {
 *		public Object doInTransactionWithoutResult(TransactionStatus status) {
 *			......
 *			if (要回滚) {
 *				throw new RuntimeException;
 *			}
 *		}
 *	});
 * 
 */
public abstract class EntityService extends BaseService {
	
	public TransactionTemplate getTransactionTemplate() {
		return super.getTransactionTemplate();
	}
}